import pandas as pd

def analyze_weibo_data(df, start_date, end_date):
    """
    分析微博数据，计算指定时间范围内的总发布数量、总点赞数、总评论数、总转发数，
    以及按月统计的发布数量、点赞数和评论数。

    参数:
    df (pd.DataFrame): 包含微博数据的DataFrame，必须包含以下列：
                       'publisher_time', 'news_like_count', 'comments_num', 'reposts_count'
    start_date (str): 分析的起始日期，格式为 'YYYY-MM-DD'
    end_date (str): 分析的结束日期，格式为 'YYYY-MM-DD'

    返回:
    dict: 包含两个DataFrame的字典：
          {
              '总体统计': pd.DataFrame,   # 总体统计
              '按月统计': pd.DataFrame    # 按月统计
          }
    """

    # 确保 'publisher_time' 列是 datetime 类型
    df['publisher_time'] = pd.to_datetime(df['publisher_time'], errors='coerce')

    # 过滤指定日期范围内的数据
    mask = (df['publisher_time'] >= pd.to_datetime(start_date)) & (df['publisher_time'] <= pd.to_datetime(end_date))
    filtered_df = df.loc[mask].copy()  # 使用 .copy() 以避免 SettingWithCopyWarning

    # 创建一个新的列 'month' 表示发布的月份
    filtered_df.loc[:, 'month'] = filtered_df['publisher_time'].dt.to_period('M')

    # 计算总体统计
    total_posts = filtered_df.shape[0]
    total_likes = filtered_df['news_like_count'].sum()
    total_comments = filtered_df['comments_num'].sum()
    total_reposts = filtered_df['reposts_count'].sum()

    overall_stats = pd.DataFrame({
        '总发布数量': [total_posts],
        '总点赞数': [total_likes],
        '总评论数': [total_comments],
        '总转发数': [total_reposts]
    })

    # 按月统计
    monthly_stats = filtered_df.groupby('month').agg({
        'wb_id': 'count',               # 发布数量
        'news_like_count': 'sum',       # 点赞总数
        'comments_num': 'sum'            # 评论总数
    }).rename(columns={
        'wb_id': '发布数量',
        'news_like_count': '点赞总数',
        'comments_num': '评论总数'
    }).reset_index()

    # 将 'month' 列转换为字符串格式
    monthly_stats['month'] = monthly_stats['month'].astype(str)
    monthly_stats = monthly_stats.rename(columns={'month': '月份'})

    return {
        '总体统计': overall_stats,
        '按月统计': monthly_stats
    }









# 示例调用
if __name__ == "__main__":
    # 设置显示选项
    pd.set_option('display.width', 1000)  # 设置显示宽度
    pd.set_option('display.max_columns', None)  # 显示所有列

    # 读取CSV文件到DataFrame
    # 假设CSV文件名为 'weibo_data.csv'，并且使用UTF-8编码
    df = pd.read_csv('../input/微博/以色列驻华使馆.csv', encoding='utf-8')

    # 定义分析的时间范围
    start_date = '2023-10-07'
    end_date = '2024-10-29'

    # 调用分析函数
    stats = analyze_weibo_data(df, start_date, end_date)

    # 输出总体统计
    print("总体统计:")
    print(stats['总体统计'].to_string(index=False))

    # 输出按月统计
    print("\n按月统计:")
    print(stats['按月统计'].to_string(index=False))

    # 将总体统计保存为CSV
    stats['总体统计'].to_csv('总体统计.csv', index=False, encoding='utf-8-sig')

    # 将按月统计保存为CSV
    stats['按月统计'].to_csv('按月统计.csv', index=False, encoding='utf-8-sig')

    print("\n统计结果已保存为 '总体统计.csv' 和 '按月统计.csv'")